package com.masnegocio.pac.util.archivo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;

import org.apache.log4j.Logger;

import com.masnegocio.pac.comun.PacConstantes;
import com.masnegocio.pac.comun.PacException;


public class ArchivoHandler {
	private static final Logger logger = Logger.getLogger(ArchivoHandler.class);
	private static Properties properties;
	public static File obtenerXsdVersion(String version) throws PacException{
		if(logger.isDebugEnabled()){
			logger.debug("SE VA A OBTENER EL XML VERSION: "+version);
		}
		try {
			if(properties==null){
				properties = new Properties();	
			}
			properties.loadFromXML(Thread.currentThread().getContextClassLoader().getResourceAsStream(PacConstantes.RUTA_ARCHIVO_RUTA));
		} catch (InvalidPropertiesFormatException e) {
			logger.error("ERROR AL OBTENER EL ARCHIVO PORQUE EL PROPERTIES ES INVALIDO "+e);
			throw new PacException(e, PacConstantes.CODIGO_ERROR_INVALID_PROPERTIES);
		} catch (FileNotFoundException e) {
			logger.error("ERROR AL OBTENER EL ARCHIVO PORQUE EL PROPERTIES NO SE ENCONTRO "+e);
			throw new PacException(e, PacConstantes.CODIGO_ERROR_APERTURA_ARCHIVO_PROPERTIES);
		} catch (IOException e) {
			logger.error("ERROR AL OBTENER EL ARCHIVO PORQUE EL PROPERTIES NO SE PUDO LEER "+e);
			throw new PacException(e, PacConstantes.CODIGO_ERROR_LECTURA_ARCHIVO_PROPERTIES);
		}
		StringBuilder sb = new StringBuilder();
		sb.append(properties.get(PacConstantes.KEY_XSD));
		sb.append(version.replace(".", "")).append("/");
		sb.append(version.replace(".", "")).append(".").append(PacConstantes.KEY_XSD);
		return new File(sb.toString());
	}
	
	public static FileInputStream obtenerXsltVersion(String version) throws PacException{
		if(logger.isDebugEnabled()){
			logger.debug("SE VA A OBTENER EL XSLT VERSION: "+version);
		}
		try {
			if(properties==null){
				properties = new Properties();	
			}
			properties.loadFromXML(Thread.currentThread().getContextClassLoader().getResourceAsStream(PacConstantes.RUTA_ARCHIVO_RUTA));
		} catch (InvalidPropertiesFormatException e) {
			logger.error("ERROR AL OBTENER EL ARCHIVO PORQUE EL PROPERTIES ES INVALIDO "+e);
			throw new PacException(e, PacConstantes.CODIGO_ERROR_INVALID_PROPERTIES);
		} catch (FileNotFoundException e) {
			logger.error("ERROR AL OBTENER EL ARCHIVO PORQUE EL PROPERTIES NO SE ENCONTRO "+e);
			throw new PacException(e, PacConstantes.CODIGO_ERROR_APERTURA_ARCHIVO_PROPERTIES);
		} catch (IOException e) {
			logger.error("ERROR AL OBTENER EL ARCHIVO PORQUE EL PROPERTIES NO SE PUDO LEER "+e);
			throw new PacException(e, PacConstantes.CODIGO_ERROR_LECTURA_ARCHIVO_PROPERTIES);
		}
		StringBuilder sb = new StringBuilder();
		sb.append(properties.get(PacConstantes.KEY_XSLT));
		sb.append(version.replace(".", "")).append("/");
		sb.append(version.replace(".", "")).append(".").append(PacConstantes.KEY_XSLT);
		try {
			return new FileInputStream(new File(sb.toString()));
		} catch (FileNotFoundException e) {
			logger.error("ERROR AL OBTENER EL ARCHIVO PORQUE EL XSLT NO SE PUDO ENCONTRAR "+e);
			throw new PacException(e, PacConstantes.CODIGO_ERROR_LECTURA_ARCHIVO_XSLT);
		}
	}

	public static InputStream obtenerXsltDatosVersion() throws PacException {
		if(logger.isDebugEnabled()){
			logger.debug("SE VA A OBTENER EL XSLT DE DATOS ");
		}
		try {
			if(properties==null){
				properties = new Properties();	
			}
			properties.loadFromXML(Thread.currentThread().getContextClassLoader().getResourceAsStream(PacConstantes.RUTA_ARCHIVO_RUTA));
		} catch (InvalidPropertiesFormatException e) {
			logger.error("ERROR AL OBTENER EL ARCHIVO PORQUE EL PROPERTIES ES INVALIDO "+e);
			throw new PacException(e, PacConstantes.CODIGO_ERROR_INVALID_PROPERTIES);
		} catch (FileNotFoundException e) {
			logger.error("ERROR AL OBTENER EL ARCHIVO PORQUE EL PROPERTIES NO SE ENCONTRO "+e);
			throw new PacException(e, PacConstantes.CODIGO_ERROR_APERTURA_ARCHIVO_PROPERTIES);
		} catch (IOException e) {
			logger.error("ERROR AL OBTENER EL ARCHIVO PORQUE EL PROPERTIES NO SE PUDO LEER "+e);
			throw new PacException(e, PacConstantes.CODIGO_ERROR_LECTURA_ARCHIVO_PROPERTIES);
		}
		StringBuilder sb = new StringBuilder();
		sb.append(properties.get(PacConstantes.KEY_XSLT_DATO)).append("/");
		sb.append(PacConstantes.KEY_XSLT_DATO).append(".").append(PacConstantes.KEY_XSLT);
		try {
			return new FileInputStream(new File(sb.toString()));
		} catch (FileNotFoundException e) {
			logger.error("ERROR AL OBTENER EL ARCHIVO PORQUE EL XSLT NO SE PUDO ENCONTRAR "+e);
			throw new PacException(e, PacConstantes.CODIGO_ERROR_LECTURA_ARCHIVO_XSLT);
		}
	}
}
